# Copyright:	Public domain.
# Filename:	P40-P47.agc
# Purpose:	Part of the source code for Colossus 2A, AKA Comanche 055.
#		It is part of the source code for the Command Module's (CM)
#		Apollo Guidance Computer (AGC), for Apollo 11.
# Assembler:	yaYUL
# Contact:	Ron Burkey <info@sandroid.org>.
# Website:	www.ibiblio.org/apollo.
# Pages:	684-736
# Mod history:	2009-05-11 RSB	Adapted from the Colossus249/ file
#				of the same name, using Comanche055 page
#				images.
#		2009-05-20 RSB	In S20.1, a DMP DDV was corrected to DMPR DDV.
#		2009-05-22 RSB	In BESTTRIM, TC PACTOFF corrected to
#				TS PACTOFF.
#		2009-05-23 RSB	Prior to the 2CADR at T5IDLDAP, added an
#				SBANK.
#
# This source code has been transcribed or otherwise adapted from digitized
# images of a hardcopy from the MIT Museum.  The digitization was performed
# by Paul Fjeld, and arranged for by Deborah Douglas of the Museum.  Many
# thanks to both.  The images (with suitable reduction in storage size and
# consequent reduction in image quality as well) are available online at
# www.ibiblio.org/apollo.  If for some reason you find that the images are
# illegible, contact me at info@sandroid.org about getting access to the
# (much) higher-quality images which Paul actually created.
#
# Notations on the hardcopy document read, in part:
#
#	Assemble revision 055 of AGC program Comanche by NASA
#	2021113-051.  10:28 APR. 1, 1969
#
#	This AGC program shall also be referred to as
#			Colossus 2A

# Page 684
# PROGRAM DESCRIPTION ** P40CSM **

		EBANK=	DAPDATR1
		BANK	31
		SETLOC	P40S
		BANK

		COUNT	24/P40

P40CSM		TC	DOWNFLAG
		ADRES	ENG2FLAG

		TC	INTPRET
		SLOAD	BOFF
			ECSTEER		# IS THIS AN EXTERNAL DELTA V BURN
			XDELVFLG
			P40S/C		# NO	CSTEER = ECSTEER
		DLOAD			# YES	CSTEER = ZERO
			HI6ZEROS
P40S/C		STODL	CSTEER
			FENG		# SET UP THRUST FOR P40 20,000 LBS
P40S/F		STODL	F		# P41 ENTERS HERE
			TIG		# ORIGINAL TIG MAY BE SLIPPED BY P40S/SV
		STORE	NOMTIG		# SET ORIGINAL TIME OF IGNITION FOR S40.9

		EXIT
		TC	BANKCALL
		CADR	R02BOTH		# IMU STATUS CHECK

P40PVA		TC	INTPRET
		CALL
			S40.1		# COMPUTE VGTIG,UT
		CALL
			S40.2,3		# COMPUTE PREFERRED ATTITUDE
		SET	EXIT
			PFRATFLG
P40SXTY		TCR	SETMINDB -1	# NARROW DEADBAND FOR MANEUVER (EBANK6)
		RELINT
		TC	BANKCALL
		CADR	R60CSM		# ATTITUDE MANEUVER
		CS	ONE		# FOR UPDATEVG
		TS	NBRCYCLS
		TC	UPFLAG
		ADRES	TIMRFLAG	# ALLOW CLOCKTASK

		TC	P41/P40
		TC	P41/DSP		# P41

P40TTOG		CAF	V06N40		# INITIALIZE FOR CLOCKTASK WHICH IS CALLED
# Page 685
		TS	NVWORD1		# BELOW

		TC	INTPRET
		VLOAD	ABVAL		# FOR R2
			VGTIG
		STODL	VGDISP
			HI6ZEROS
		STORE	DVTOTAL
		EXIT

		EXTEND
		DCA	STEERADS	# SET FOR UPDATEVG AND TEST FOR STEERING
		DXCH	AVEGEXIT	# AFTER AVERAGE G

P40GMB		CAF	P40CKLS2	# (4.1 PROTECTION)
		TC	BANKCALL
		CADR	GOPERF1
		TCF	POST41		# V34
		TCF	TST,TRIM	# V33
TRIMONLY	CS	BIT1		# SET MRKRTEMP FOR GIMBAL TRIM (-1)
	+1	TS	MRKRTMP		# ENTRY FROM TST,TRIM

		CAF	ZERO		# SET CNTR	+0 FOR RESTART LOGIC IN S40.6
		TS	CNTR		#	+0 SAYS NORMAL ENTRY
					#	+1 (PRE40.6) SAYS RESTART ENTRY

		CAF	ONE
		TC	WAITLIST
		EBANK=	DAPDATR1
		2CADR	S40.6

		CCS	MRKRTMP		# TEST TO FIND TIME TO WAIT FOR GIMBAL TEST
		CAF	18SEC		# PLUS, DELAY FOR 18 SECONDS
		TCF	+2		# HOLE
		CAF	5SEC		# DELAY FOR TRIM ONLY TASK
		TC	BANKCALL
		CADR	DELAYJOB
		TC	2PHSCHNG
		OCT	40026		# 6.2 = PRE40.6(-0CS), CLOKTASK(100CS)
		OCT	00234		# 4.23 = P40S/SV (PRIO12)
P40S/RS		CAF	ONE
		TC	WAITLIST	# P41/SDP
		EBANK=	TIG
		2CADR	CLOKTASK

		RELINT

P40S/SV		TCR	E7SETTER	# JOB, 4.23 PRETECTS, PREO12
		EBANK=	TIG
# Page 686
		TC	INTPRET
		DLOAD	DSU
			TIG
			SEC29.96
		STORE	TDEC1

		CALRB			# RETURN IN BASIC
			MIDTOAV1
		TCF	+2
		TC	P40SNEWM	# INTEGRATION TIME GREATER THAN ALLOWED
P40SET		EXTEND
		DCA	MPAC		# DELTA TIME TO PREREAD (INT.INIT.)
		DXCH	P40TMP
		EXTEND
		DCS	5SECDP		# FOR TIGBLNK
		DAS	P40TMP
		EXTEND
		DCA	P40TMP
		TC	LONGCALL
		EBANK=	TIG
		2CADR	TIGBLNK

		TC	PHASCHNG
		OCT	20214		# 4.21 = TIGBLNK (P40TMP CS)

		TCF	ENDOFJOB
P40BLNKR	TC	BANKCALL
		CADR	CLEANDSP	# REMOVE RESIDUE
		TCF	ENDOFJOB
		EBANK=	TIG
P40SNEWM	EXTEND
		DCA	PIPTIME1
		DXCH	TIG		# SET NEW TIG FOR 06 40
		EXTEND
		DCA	SEC29.96
		DAS	TIG
		TCF	P40SET		# FOR LONGCALL OF TIG-30 (OR -35)

		EBANK=	DAPDATR1
POSTBURN	CAF	V16N40
		TC	BANKCALL
		CADR	REFLASH
		TCF	POST41		# V34 GO FINISH
		TCF	P40RCS		# PROCEED
		TCF	POSTBURN	# RECYCLE
P40RCS		EXTEND			# V99N40 ENTERS HERE ON A P40 BYPASS SPS
		DCA	ACADN85
		DXCH	AVEGEXIT
		CAF	2SECS		# WAIT FOR CALCN85 VIA AVEGEXIT
		TC	BANKCALL
# Page 687
		CADR	DELAYJOB

P40MINDB	TCR	SETMINDB -1
		RELINT
TIGNOW		TC	PHASCHNG
		OCT	05024		# TYPE C GROUP 4 BELOW FOR NOUN 85
		OCT	20000		# PRIO 20
		CAF	V16N85B
		TC	BANKCALL
		CADR	REFLASH
		TCF	POST41		# FINISH P40/P41
		TCF	POST41		# V03 PROCEED WITH REST OF THE CLEAN-UP
		TCF	TIGNOW		# V32 NOT GSOP RESPONSE BUT REDISPLAY N85

POST41		EXTEND
		DCA	SERVCADR
		DXCH	AVEGEXIT
		TCF	GOTOPOOH

MINDB		DEC	46
MAXDB		DEC	455
		EBANK=	DAPDATR1
	-1	INHINT
SETMINDB	CA	CDUX		# ROUTINE FOR SETTING
		TS	THETADX		# THE MINIMUM DEADBAND
		EXTEND			# IN AUTOPILOT
		DCA	CDUY
		DXCH	THETADY
		CA	MINDB		# SHOULD BE CALLED UNDER
		TS	ADB		# INTERRUPT INHIBITED
		CS	BIT4		# EBANK = E6
		MASK	DAPDATR1
		TS	DAPDATR1
		TC	Q

		EBANK=	DAPDATR1
	-1	INHINT
SETMAXDB	CA	MAXDB		# ROUTINE FOR SETTING
		TS	ADB		# THE MAXIMUM DEADBAND IN AUTOPILOT
		CS	DAPDATR1
		MASK	BIT4		# SHOULD BE CALLED UNDER
		ADS	DAPDATR1	# INTERRUPT INHIBITED
		TC	Q		# EBANK = E6

# Page 688
# PROGRAM DESCRIPTION ** P41CSM **

		SETLOC	P40S2
		BANK

		EBANK=	DAPDATR1
		COUNT	24/P41

P41CSM		TC	UPFLAG
		ADRES	ENG2FLAG	# SET FOR RCS

		TC	INTPRET
		DLOAD
			HI6ZEROS	# FOR P41 CSTEER =0
		STORE	CSTEER

		DLOAD	BON
			FRCS2		# 2JET THRUST FOR S40.1
			NJETSFLG
			P40S/F		# NJETS = 1 2-JET
		DAD	GOTO		# NJETS = 0 4-JET
			FRCS2
			P40S/F

		SETLOC	P40S
		BANK

P41/P40		CS	MODREG
		MASK	ONE		# P41EXITS AT CALL LOC +1
		EXTEND
		BZF	+2		# P41
		INCR	Q		# P40 EXITS AT CALL LOC +2
		TC	Q

TTG/0		CAF	PRIO20		# TASK (4.4 PROTECTS IN P41)
		TC	NOVAC
		EBANK=	DAPDATR1
		2CADR	TIGNOW

P40CLK		TC	DOWNFLAG
		ADRES	TIMRFLAG

		TCF	TASKOVER

P41/DSP		CAF	V06N85B		# SET UP FOR NONFLASH V 06 N85 BY CLOCKJOB
		TS	NVWORD1

		TC	INTPRET
# Page 689
		CALL			# COMPUTE
			P40CNV85	#	VGTIG IN CTRL COORDS
		EXIT
		EXTEND			# DO CONTROL COORD CALCULATION AFTER AVEG
		DCA	ACADN85
		DXCH	AVEGEXIT
		TC	2PHSCHNG
		OCT	40036		# 6.3=CLOKTASK(100CS)
		OCT	234		# 4.23=P40S/SV(PRIO12)

		TCF	P40S/RS
P41REDSP	CAF	V16N85B		# ENTER FROM P41 SIDE OF TIGAVEG
		TS	NVWORD1		# REDISPLAY NONFLASHING
		CAF	SEC29.96 +1
		TC	WAITLIST
		EBANK=	DAPDATR1
		2CADR	TTG/0

		CS	BIT3
		TCF	TTGPHS
P40CNV85	STQ	SETPD
			QTEMP1
			0
		VLOAD	PUSH
			VGPREV		# EQUALS VGTIG (TARGETTING INPUT)
		CALL
			S41.1
		STCALL	VGBODY
			QTEMP1

		EBANK=	DAPDATR1
CALCN85		TC	INTPRET
		CALL
			UPDATEVG	# NEW VG, S40.8 (+MAYBE S40.9)
		CALL
			P40CNV85	# COMPUTE VGBODY
		EXIT
		TC	SERVXT
FENG		2DEC	9.1188544 B-7	# SPS THRUST (20500LBS), SC.AT B+7 NEWT/E4

FRCS2		2DEC	.087437837 B-7	# RCS ULLAGE (199.6COS10 LBS), SC.AT

					#	B+7 NEWTONS/E+4
SEC24.96	DEC	2496
SEC29.96	2DEC	2996

18SEC		DEC	1800
P40CKLS2	OCT	204
40CST5		OCT	37730		# 40 CS FOR THE T5 CLOCK
OCT12		=	TEN
# Page 690
V1683		VN	1683
V06N85B		VN	0685
V16N85B		VN	1685
V06N40		VN	0640
V16N40		VN	1640
OCT27/24	OCT	27
OCT53		OCT	53
OCT35		OCT	35
		EBANK=	DAPDATR1
T5IDL24		2CADR	T5IDLOC

3MDOT		DEC	86.6175796 B-16	# 3SEC MASS LOSS (63.8 LBS/SEC), SC.AT
					# B+16 KB/SEC (NOT, EMDOT IS PAD-LOADED,
					# BUT 3MDOT IS NOT A CRITICAL QUANTITY, SO
					# IT CAN REMAIN IN FIXED MEMORY)
TST,TRIM	CAF	BIT1		# SET UP FOR GIMB DRIVE TEST AND TRIM (+1)
		TCF	TRIMONLY +1
TIGBLNK		CAF	5SEC		# CALL TIGAVEG IN FIVE SEC AT TIG-30
		TC	WAITLIST
		EBANK=	TIG
		2CADR	TIGAVEG

		CAF	ZERO		# DISABLE HERE, NOT IN P40BLNKR
		TS	NVWORD1

		CAF	PRIO14
		TC	NOVAC
		EBANK=	TIG
		2CADR	P40BLNKR	# DON'T PROTECT -- RESTARTS BLANK DSKY

		CS	OCT37		# 4.37 = TIGAVEG (500CS)
P40TSK		TC	NEWPHASE
		OCT	4
		TC	TASKOVER

		EBANK=	TIG
ACADN83		2CADR	CALCN83

		EBANK=	TIG
SERVCADR	2CADR	SERVEXIT

		EBANK=	DAPDATR1
ACADN85		2CADR	CALCN85

# Page 691
# PROGRAM DESCRIPTION ** P47CSM **

		COUNT	24/P47

		EBANK=	TIG
P47CSM		TC	BANKCALL	# IMU STATUS CHECK
		CADR	R02BOTH
		TC	INTPRET
		CALRB
			MIDTOAV2
		CA	MPAC +1		# DELTA TIME TO RPEREAD (LESS THAN 100
		TS	P40TMP		#	CS, WITH A TPAGREE, INT.INIT.)
		TC	WAITLIST
		EBANK=	TIG
		2CADR	TIGON		# TIGON IS REQUIRED TO MATHCHTAT AND AVEG

		TC	PHASCHNG
		OCT 	40574		# A, 4.57 = TIGON (P40TMP CS)
		TCF	ENDOFJOB

		EBANK=	P40TMP
TIGON		EXTEND
		DCA	ACADN83
		DXCH	AVEGEXIT
		CAF	PRIO30		# FORCE ZEROING OF N83 BEFORE SERVICER
		TC	NOVAC
		EBANK=	TIG
		2CADR	P47BODY

		CS	BIT2		# 4.2 = PRECHECK (-0CS), P47BODY (PRIO30)
		TCF	TTGPHS

		EBANK=	TIG
CALCN83		TC	INTPRET
		SETPD			# SET UP PUSHLIST FOR S41.1
			0
		VLOAD	VAD
			DELVCTL
			DELVREF
		STORE	DV47TEMP	# FOR COPYCYCLE BELOW
		PUSH	CALL
			S41.1
		STCALL	DELVIMU
			S11.1		# CALC. VI, H, HDOT FOR NOUN 62
		EXIT
		TC	PHASCHNG
		OCT	10035
# Page 692
		CAF	FIVE
		TC	GENTRAN
		ADRES	DV47TEMP
		ADRES	DELVCTL

		TC	SERVXT
P47BODY		TC	INTPRET
		VLOAD
			HI6ZEROS
		STORE	DELVIMU		# CLEAR DISPLAY AND ACCUMULATOR STORAGE
		STORE	DELVCTL		# UPON INITIATION OR ENTER RESPONSE
		EXIT
P47BOD		CAF	PRIO15		# LOWER PRIO THAN CALCN83 (20)
		TC	PRIOCHNG	#	TO PREVENT INTERRUPTION OF CALCN83
		TC	PHASCHNG
		OCT	05024		# TYPE C GROUP 4 BELOW FOR NOUN 83
		OCT	15000		# PRIO 15
P47/DSP		CAF	V1683
		TC	BANKCALL
		CADR	GOFLASH
		TC	GOTOPOOH
		TC	GOTOPOOH
		TCF	P47BODY		# RECYCLE -- CLEAR ACCUMULATED VELOCITY

# Page 693
# ROUTINE ** TIG-30 ** DESCRIPTION

		EBANK=	TIG
		COUNT	24/P40

TIGAVEG		TC	P41/P40		# TASK (4.37 PROTECTS)
		TCF	P41REDSP

		CAF	V06N40		# UNBLANK DISPLAY
		TS	NVWORD1

		CAF	SEC24.96
		TC	WAITLIST
		EBANK=	TIG
		2CADR	TIG-5

		CS	SIX		# 4.6 = TIG-5 (2496CS), PRECHECK (-0CS)
TTGPHS		TC	NEWPHASE	# ENTRY FROM P41REDSP (P41) WITH A=-4, OR
		OCT	4		#       FROM TIGON    (P47) WITH A=-1

PRECHECK	CCS	PHASE5		# HAS SERVICER BEEN RESTARTED
		TCF	TASKOVER	# YES, DON'T START ANOTHER ONE
		TC	POSTJUMP
		CADR	PREREAD

# Page 694
# ROUTINE ** TIG-5 ** DESCRIPTION

		EBANK=	TIG
TIG-5		CAF	5SEC
		TC	WAITLIST
		EBANK=	DAPDATR1
		2CADR	TIG-0

		CS	BIT9		# WILL CAUSE V99 FLASH
		TS	NVWORD1

		TC	2PHSCHNG
		OCT	40074		# A, 4.7 = TIG-0 (500CS)
		OCT	00033		# A, 3.3 = S40.13 (PRIO20)

		CAF	PRIO20
		TC	FINDVAC
		EBANK=	TGO
		2CADR	S40.13

		TCF	TASKOVER

# Page 695
# ROUTINES ** TIG-0 ** AND ** IGNITION ** DESCRIPTION

		EBANK=	DAPDATR1	# TASK, 4.7 PHASE, OR 4.77 (-0CS) IN R40
TIG-0		CS	FLAGWRD7	# SET IGN FLAG
		MASK	BIT13
		ADS	FLAGWRD7

		CAE	FLAGWRD7	# CHECK ASTN FLAG FOR V99 RESPONSE
		MASK	BIT12
		EXTEND
		BZF	TASKOVER	# WAIT FOR V99P

		CAF	V06N40		# CLEAR THE V99 (IN CASE OF A RESTART
		TS	NVWORD1		#	DURING THE V99 SEQUENCE)

		TC	PHASCHNG	# V99P HAS COME ALREADY, DO IGNITION NOW
		OCT	00614		# A, 4.61 = IGNITION (-0CS) TBASE OLD

IGNITION	CAE	CDUX		# SAVE FOR ROLL DAP REFERENCE OGAD
		TS	OGAD		#	V99PJOB (CLOCKJOB) SETS UP IGNITION
		EXTEND			# 	TASK (4.61 PROTECTION)
		DCA	TIME2		#	FOR RESTARTS
		DXCH	TEVENT
		CS	FLAGWRD5	# SET ENGONFLG
		MASK	BIT7
		ADS	FLAGWRD5
SPSON		CAF	BIT13		# TURN ON SPS ENGINE
		EXTEND
		WOR	DSALMOUT

IMPULCHK	CAF	BIT9		# CHECK FOR IMPULSIVE BURN
		MASK	FLAGWRD2
		CCS	A
		TCF	IMPLBURN	# IMPULSIVE
		CS	FLAGWRD6	# NON-IMPULSIVE, SET STRULLSW FOR STEERULL
		MASK	BIT13
		ADS	FLAGWRD6

PREPTVC		CS	OCT60000	# RESET T5 BITS
		MASK	FLAGWRD6
		TS	FLAGWRD6

		EXTEND			# KILL RCS
		DCA	T5IDL24
		DXCH	T5LOC

		CS	THREE		# 4.3 = DOTVCON (40CS)
		TC	NEWPHASE
		OCT	4

# Page 696
		TC	FIXDELAY
		DEC	40		# 0.4 SECOND DELAY FOR THRUST BUILDUP

DOTVCON		CS	BIT1		# SET TVCPHASE = TVCDAPON CALL (FRESHDAP)
		TS	TVCPHASE
		CAF	ZERO		# SET TVCEXECUTIVE PHASE
		TS	TVCEXPHS
		CS	OCT60000	# SET T5 BITS TO INDICATE TVC TAKEOVER ....
		MASK	FLAGWRD6	#	BITS 15,14 = 10
		AD	BIT15
		TS	FLAGWRD6

		CAF	THREE		# 6.3 = CLOKTASK (100CS), DROPPING PRE40.6
		TS	L		#	WHICH IS HANDLED NOW BY REDOTVC
		COM
		DXCH	-PHASE6

		EXTEND			# STORE RCS ATTITUDE ERRORS FOR USE IN
		DCS	ERRORY		# INITIALIZING TVC ATTITUDE ERRORS
		DXCH	ERRBTMP

		CS	FIVE		# 4.5 = DOSTRULL (160 CS)
		TC	NEWPHASE
		OCT	4

		CAF	POSMAX		# SET TIME5 FOR STARTING RIGHT AWAY
		TS	TIME5
		EXTEND
		DCA	TVCON2C		# (TVCDAPON)
		DXCH	T5LOC		# (KILLS RCS DAP)

		TC	FIXDELAY	# 0.4 + 1.6 = 2.0 SEC FOR ULLAGE-OFF AND
		DEC	160		# 	STEERING (IF NON-IMPULSIVE)

DOSTRULL	CAF	BIT13		# CHECK STRULLSW FOR IMPULSIVE BURN
		MASK	FLAGWRD6
		CCS	A
		TCR	STEERULL	# NON-IMPULSIVE, STEERING AND ULLAGE OFF
		TCR	ULAGEOFF	# ULLAGE OFF (ONLY, OR AGAIN)

		EXTEND
		DCA	NEG0		# KILL GROUP 4 (DP NEG0 = -0,+0)
		DXCH	-PHASE4

ENDIGN		TCF	TASKOVER

STEERULL	CS	FLAGWRD2	# SET STEERSW
		MASK	BIT11
		ADS	FLAGWRD2

# Page 697

ULAGEOFF	CAF	ZERO
		EXTEND
		WRITE	CHAN5		# ZERO CHANNEL 5
		TC	Q

IMPLBURN	CS	BIT13		# RESET STRULLSW (COULD BE AN IMPULSIVE
		MASK	FLAGWRD6	#	ENGINE FAIL)
		TS	FLAGWRD6

		TCR	E7SETTER

		EBANK=	TIG
		EXTEND			# PREPARE FOR R1 OF V06N40 (CLOCKTASK)
		DCA	TGO
		DXCH	TIG
		EXTEND
		DCA	TIME2
		DAS	TIG

		TC	2PHSCHNG
		OCT	40153		# A, 3.15 = ENGINOFF (TGO+1) .... NOT GROUP
		OCT	07014		# C, DELTAT NEXT, TASK BELOW, IN
		DEC	-0		# -0 CS
		EBANK=	DAPDATR1
		2CADR	IMPLCONT

		CAE	TGO +1		# (TPAGREE IN S40.13, LESS THAN 600CS)
		TC	WAITLIST
		EBANK=	TGO
		2CADR	ENGINOFF

IMPLCONT	CS	BIT9		# RESET IMPULSW, ENGINOFF IS NOW SET UP
		MASK	FLAGWRD2
		TS	FLAGWRD2

		TCR	E6SETTER
		EBANK=	DAPDATR1

		CAF	ZERO		# SET UP V97VCNTR IN CASE ENGINOFF (MASS-=
		TS	V97VCNTR	#	BACK) ARRIVES BEFORE TVCDAPON

		TCF	PREPTVC

		EBANK=	TGO		# E7 FORCED BY 3.15SPOT VARIABLE DELTA-T
ENGINOFF	TCR	E6SETTER	# TASK, 3.15 PHASE (TGO+1 CS)	GET E6
		EBANK=	DAPDATR1
		CAE	CSMMASS
		TS	MASSTMP		# COPYCYCLE FOR MASSBACK
# Page 698
		TC	2PHSCHNG
		OCT	00003		# KILL GROUP 3 PROTECTION OF ENGINOFF, DO
		OCT	40634		# A, 4.63 = DOSPSOFF (-0CS)
DOSPSOFF	TCR	SPSOFF		# SHUTDOWN SPS, MASS UPDATES, ETC.
		CS	OCT27/24	# (OCTAL 27)
		TC	NEWPHASE
		OCT	4		# 4.27 = DOTVCRCS (250 CS)

		TC	FIXDELAY	# 2.5 SECOND DELAY FOR SPS TAILOFF
		DEC	250

DOTVCRCS	TCR	SETMAXDB	# WIDE DEADBAND FOR CUTOFF TRANSIENT

		TC	IBNKCALL	# SET UP RCS DAP (KILLS TVCDAPS, SETS T5
		CADR	RCSDAPON	#	BITS, WAITS 0.6SEC FOR TVCEXEC DIE)

		TC	IBNKCALL	# UPDATE WEIGHT/G AND MASS-PROPERTIES FOR
		CADR	MASSPROP	#	RCS DAP STARTUP IN 0.6 SECONDS

		TCR	TVCZAP		# WIPE OUT TVC, TURN OFF CLOKTASK

		TC	PHASCHNG
		OCT	00354		# A, 4.35 = POSTBURN (NOVAC, PRIO12)
		CAF	PRIO12		# SET UP POSTBURN V16N40 JOB
		TC	NOVAC
		EBANK=	DAPDATR1	# (SET MAXDB IN POST41)
		2CADR	POSTBURN

		TCF	TASKOVER

		EBANK=	DAPDATR1
SPSOFF		EXTEND			# ESTABLISH SPSOFF TEVENT
		DCA	TIME2
		DXCH	TEVENT
		CS	BIT7		# RESET ENGONFLG
		MASK	FLAGWRD5
		TS	FLAGWRD5	# (RESTARTS WILL SHUT DOWN SPS NOW)
		CS	BIT13		# SHUT DOWN SPS ENGINE
		EXTEND
		WAND	DSALMOUT

		CAF	BIT14		# ISSUE SIV CUTOFF COMMAND
		EXTEND			# FOR POSSIBLE BACK-UP USE
		WOR	CHAN12
MASSBACK	CAE	V97VCNTR	# RESTORE PART OF PRE-DECREMENTED MASS
					#	V97CNTR = VCNTR UNLESS V97 IS
					#	ACTIVE.  ONLY V97CNTR IS THEN RIGHT.
		EXTEND			# VCNTR COUNTS 1/2-SECONDS IN TVC EXEC
		MP	EMDOT		#	MDOT, SC.AT B+3 KG/CS
		LXCH	A
# Page 699
		EXTEND
		MP	1SEC		# DEC 100
		AD	MASSTMP		# CORRECTION IS ACCURATE TO 5 CS OF FLOW
		TS	CSMMASS		#	(1.44 KG OR 0.4 BITS)

		CA	TVCPHASE	# CHECK IF OK FOR TRIM UPDATE
		AD	ONE		#	THESE CHECKS ARE ONLY NEEDED
		EXTEND			#	FOR A LESS THAN 0.4 SEC BURN
		BZF	BTRIMR		# NO.  INITIALIZATION NOT COMPLETE
		CS	FLAGWRD6	# YES, CHECK IF TVC
		MASK	OCT60000
		EXTEND
		BZMF	BTRIMR		# NO, NOT TVC YET
BESTTRIM	CAE	DELPBAR		# UPDATE TRIMS WITH DELFILTER VALUES
		TS	PACTOFF
		CAE	DELYBAR
		TS	YACTOFF
BTRIMR		TC	Q
		EBANK=	DAPDATR1
STEERADS	2CADR	STEERING

.6SECT5		OCT	37703
5SECDP		DEC	0		# MAKE DP 5SEC
5SEC		DEC	500
OCT02202	OCT	02202		# BITS 2, 8, 11 FOR CHANNEL 12 TVC/OPTICS
		EBANK=	DAPDATR1
TVCON2C		2CADR	TVCDAPON

	-1	INHINT
TVCZAP		CS	OCT02202	# DISABLE TVC AND OPT ERR CNTRLS, REENGAGE
		EXTEND			#	OPTICS DAC
		WAND	CHAN12
		CS	BIT1		# ENABLE T4RUPT OPTICS MONITOR .... PERMIT
		TS	OPTIND		#	OPTICS-ZERO BUT NOT OPTICS-DRIVE
		CAF	ZERO		# CLEAR NVWORD1 IN CASE CLOCKJOB WAITING
		TS	NVWORD1
		CS	BIT11		# CLEAR TIMRFLAG TO STOP CLOKTASK
		MASK	FLAGWRD7
		TS	FLAGWRD7
		TC	Q
		EBANK=	DAPDATR1
UPDATEVG	STQ	BON
			QTEMP1
			XDELVFLG
			CALL40.8

		SLOAD	BMN
			NBRCYCLS
			SETUP.9
# Page 700

		VLOAD	VAD
			DELVSUM
			DELVREF
		STORE	DELVSUMP
		EXIT
		CA	ONE
		AD	NBRCYCLS
		TS	NBRCYCLP

		TC	PHASCHNG	# TYPE B RESTART RESTART BELOW AND 5.3 REREADACCS
		OCT	10035

		CA	NBRCYCLP
		TS	NBRCYCLS
		TC	INTPRET
		VLOAD
			DELVSUMP
		STORE	DELVSUM

CALL40.8	CALL
			S40.8
		GOTO
			QTEMP1

SETUP.9		BON	SLOAD
			FIRSTFLG
			SURELY.9
			NBRCYCLP
		NORM	VXSC		# (NORM HANDLES ZERO PROPERLY)
			X1
			BDT
		VSR*	VAD
			0 -14D,1
			VGTEMP
		VSU
			DELVSUM
		STORE	VGPREV
SURELY.9	EXIT
		CAF	PRIO10
		TC	FINDVAC
		EBANK=	DAPDATR1
		2CADR	S40.9

		TC	2PHSCHNG
		OCT	00051		# A, 1.5 = REDO40.9, PRIO 10
		OCT	10035
		TC	INTPRET
		VLOAD
			RN		# ACTIVE VEHICLE RADIUS VECTOR AT T1
		STOVL	RINIT
# Page 701
			VN		# ACTIVE VEHICLE VELOCITY VECTOR AT T1
		STODL	VINIT
			PIPTIME
		STORE	TNIT
		BDSU
			TPASS4
		STOVL	DELLT4
			HI6ZEROS
		STODL	DELVSUM
			HI6ZEROS
		STORE	NBRCYCLS
		GOTO
			CALL40.8
		EBANK=	DAPDATR1
STEERING	TC	INTPRET
		CALL
			UPDATEVG
		EXIT
		CAF	BIT9		# CHECK IMPULSW
		MASK	FLAGWRD2
		CCS	A
		TCF	+3		# PRE-IGNITE, REQUEST ENG-OFF, OR POST-OFF
SERVXT		TC	POSTJUMP
		CADR	SERVEXIT
		CAF	BIT13		# CHECK ENGINE-ON/-OFF
		EXTEND
		RAND	DSALMOUT
		EXTEND
		BZF	SERVXT		# ENGINE-OFF, SO PRE-IGNITE OR POST-OFF
		TCR	E7SETTER
		EBANK=	TIG
		INHINT
		EXTEND
		DCA	TIG
		DXCH	MPAC
		EXTEND
		DCS	TIME2
		DAS	MPAC
		TCR	DPAGREE
		CAE	MPAC +1		# (LESS THAN 6 (OR 4) SECONDS TO GO)
		CCS	A		# PROTECT AGAINST NEG/ZRO W.L. CALL
		TCF	+3
		TCF	+2
		CAF	ZERO
		AD	ONE
		XCH	L
		CA	ZERO
		DXCH	TGO
		CA	TGO +1
		TC	WAITLIST
# Page 702
		EBANK=	TGO
		2CADR	ENGINOFF

		TC	2PHSCHNG
		OCT	40153		# A, 3.15 = ENGINOFF (TGO+1) .... NOTE GROUP
		OCT	10035		# B, 5.3 = REREADAC, AND START BELOW
		TC	DOWNFLAG	# CLEAR IMPULSW, ENGINOFF IS NOW SET UP
		ADRES	IMPULSW		# RESTARTS OK
		TCF	SERVXT

# Page 703
# ROUTINE ** CLOKTASK ** DESCRIPTION

		EBANK=	TIG
CLOKTASK	CAF	BIT11		# IS TIMRFLAG SET
		MASK	FLAGWRD7
		CCS	A
		TCF	CLOCKON
		TC	PHASCHNG
		OCT	00006		# KILL RESTART
		TC	TASKOVER

CLOCKON		EXTEND
		DCA	TIME2
		DXCH	TTOGO
		EXTEND
		DCS	TIG
		DAS	TTOGO

SETCLOCK	CAF	1SEC
		TC	WAITLIST
		EBANK=	TIG
		2CADR	CLOKTASK

		CCS	NVWORD1
		TCF	+3
		TCF	SETTB6

		TCF	+1
		CS	V06N85B		# CHECK FOR V06N85B (P41)
		AD	NVWORD1
		EXTEND
		BZF	SETUPDYN	# V06N85, SO UPDATE N85 FOR DYNAMIC DISP

		CAF	PRIO27
		TC	NOVAC
		EBANK=	DAPDATR1
		2CADR	CLOCKJOB

SETTB6		CS	TIME1		# SET GROUP6 TIMEBASE
		TS	TBASE6
		TCF	TASKOVER

SETUPDYN	CAF	PRIO27		# SET UP A JOB TO UPDATE N85 (FOR P41=V06)
		TC	FINDVAC
		EBANK=	DAPDATR1
		2CADR	DYNDISP

		TCF	SETTB6		# CLOSE OUT CLOCKTASK
# Page 704
DYNDISP		TC	INTPRET		# UPDATE N85 FOR A DYNAMIC V06N85 IN P41.
		CALL			#	PRIOR TO BLANKING AND AVEG (V16N85)
			P40CNV85
		EXIT
		TCF	CKNVWRD1

# Page 705
# ROUTINE ** CLOCKJOB ** DESCRIPTION

		EBANK=	DAPDATR1
CLOCKJOB	CA	CDUX
		TS	CDUSPOTX
		CA	CDUY
		TS	CDUSPOTY
		CA	CDUZ
		TS	CDUSPOTZ
		TC	BANKCALL
		CADR	QUICTRIG
CKNVWRD1	INHINT
		CCS	NVWORD1		# DETERMINE FUNCTION, INDICATED BY NVWORD1
		TCF	NOFLASH
		TCF	ENDOFJOB
		TCF	ENGREQST	# SPS ENGINE-ON-ENABLE V99 FLASH
FAILDSP		CAF	V06N40		# SPS ENGINE-FAILED V97 FLASH
		TC	BANKCALL
		CADR	CLOCPLAY
		TCF	V97T		# TERMINATE
		TCF	V97P		# PROCEED
		TCF	V97E		# ENTER

ENGREQST	CAF	V06N40
		TC	BANKCALL
		CADR	CLOCPLAY	# LINUS MAKES IT A REDO, INHINT OK
		TCF	V99T		# TERMINATE
		TCF	V99P		# PROCEED
		TCF	V99E		# ENTER

NOFLASH		CAE	NVWORD1		# DISPLAY NVWORD1 NORMALLY
		TC	BANKCALL
		CADR	REGODSP

E7SETTER	CAF	EBANK7
		TS	EBANK
		EBANK=	TIG
		TC	Q

E6SETTER	CAF	EBANK6		# SET UP EBANK6
		TS	EBANK
		EBANK=	DAPDATR1
		TC	Q

		EBANK=	DAPDATR1
V99E		TC	2PHSCHNG
		OCT	00006		# KILL PRE40.6/CLOKTASK PROTECTION
		OCT	05024		# C, PRIORITY NEXT, JOB BELOW
# Page 706
		OCT	27000
V99EJOB		TCR	TVCZAP -1	# WIPE OUT TVC, CLOKTASK
		TCF	P40RCS		# V16N85 POST-BURN OPERATIONS

		EBANK=	DAPDATR1
V99T		TC	2PHSCHNG	# (ENTRY FROM V97T FLOW TOO)
		OCT	00006		# KILL PRE40.6/CLOKTASK PROTECTION
		OCT	05024		# C, PRIORITY NEXT, JOB BELOW
		OCT	27000
V99TJOB		TCR	TVCZAP -1	# WIPE OUT TVC, CLOKTASK
		TCF	POST41		# AVEGEXIT, SETMAXDB, GOTOPOOH

V99P		INHINT
		CAE	FLAGWRD7	# CHECK ASTN FLAG FOR PRIOR V99P
		MASK	BIT12
		CCS	A
		TCF	V99P/TIG	# YES, THIS MUST BE A RESTART ENTRY

ASTNV99P	CAF	BIT12		# SET ASTN FLAG
		ADS	FLAGWRD7
		CAE	FLAGWRD7	# CHECK IGN FLAG FOR TIG-0 ARRIVAL
		MASK	BIT13
		EXTEND
		BZF	V99P/TIG	# NO, CLEAR THE V99 AND WAIT FOR TIG-0

ENDV99PI	CAF	BIT1		# TIG-0 HAS COME ALREADY
		TC	WAITLIST	# SET UP IGNITION HERE
		EBANK=	DAPDATR1
		2CADR	IGNITION

V99P/TIG	CAF	V06N40		# CLEAR THE V99 FLASH AND WAIT FOR TIG-0
		TS	NVWORD1
ENDV99P		TCF	ENDOFJOB

		EBANK=	CSMMASS
V97T		TC	2PHSCHNG
		OCT	00006		# KILL GROUP 6 (CLOKTASK)
		OCT	40674		# A, 4.67 = V97TTASK (-0 CS), TBASE NOW
		CAF	BIT1
		TC	TWIDDLE
		ADRES	V97TTASK	# KEEP EBANK6 FOR MASSES, SPSOFF, ETC.
		TCF	ENDOFJOB

		EBANK=	CSMMASS
V97TTASK	CAF	ZERO		# DISABLE CLOCKJOB
		TS	NVWORD1
		CAF	3MDOT		# 3 SECONDS OF MDOT (2-4 SEC ENGFAIL
		AD	CSMMASS		#	DETECTION) NOT LOST BECAUSE THRUST
		TS	MASSTMP		#	FAILED.  COPYCYCLE FOR MASSBACK
# Page 707
		TC	PHASCHNG
		OCT	05014		# C, DELTAT NEXT, TASK BELOW, IN
		DEC	-0		# -0 CS

		TCR	SPSOFF		# SHUTDOWN SPS ENGINE, MASS UPDATE, ETC.
		TC	PHASCHNG
		OCT	00714		# A, 4.71 = V97TRCS (250 CS), TBASE OLD
		TC	FIXDELAY	# DELAY 2.5 SECONDS FOR (POSSIBLE) TAIL-
		DEC	250		#	OFF (FALSE THRUST-LOSS)

		EBANK=	DAPDATR1
V97TRCS		TC	IBNKCALL	# RCS DAP IN 0.6SEC, SETTING T5 BITS TO
		CADR	RCSDAPON	#	KILL TVCEXEC/TVCROLLDAP STARTS
		CAF	PRIO27		# SET UP V99T FOR TVCZAP AND POST41 (SET-
		TC	NOVAC		#	MAXDB AND GOTOPOOH)
		EBANK=	DAPDATR1	# EBANK6 FOR SETMAXDB IN POST41
		2CADR	V99T

ENDV97T		TCF	TASKOVER

		EBANK=	V97VCNTR
V97P		TC	PHASCHNG
		OCT	40734		# A, 4.73 = V97PTASK (-0 CS), TBASE NOW
		CAF	BIT1
		TC	TWIDDLE
		ADRES	V97PTASK
		TCF	ENDOFJOB

		EBANK=	V97VCNTR
V97PTASK	CAE	V97VCNTR	# GET MASS UPDATES (TVCEXEC) GOING AGAIN
		TS	VCNTR		#	(ERRORS IF FLASE THRUST-LOSS AND/OR
					#	POOR SYNC OF MANUAL ENGINE-ON AND
					#	THE VERB 97 PROCEED)
		CAF	V06N40		# REDISPLAY V06N40
		TS	NVWORD1
		TC	UPFLAG		# SET IDLEFAIL TO ALLOW R41-BYPASS, IN
		ADRES	IDLEFAIL	#	CASE OF UNFAVORABLE S40.8 SYNCH
		TC	UPFLAG		# SET STEERSW TO RE-ENABLE STEERING
		ADRES	STEERSW
		TC	PHASCHNG
		OCT	00134		# A, 4.13 = R40ENABL (200 CS), TBASE OLD
		TC	FIXDELAY	# WAIT 2 SECONDS, THEN
		DEC	200

		EBANK=	WHOCARES
R40ENABL	TC	DOWNFLAG	# RE-ENABLE R40 BY CLEARING IDLEFAIL
		ADRES	IDLEFAIL
		TC	PHASCHNG
		OCT	00004		# KILL GROUP 4
# Page 708
ENDV97P		TCF	TASKOVER

		EBANK=	WHOCARES
V97E		TC	PHASCHNG
		OCT	40534		# A, 4.53 = V97ETASK (-0 CS), TBASE NOW
		CAF	BIT1
		TC	WAITLIST
		EBANK=	TIG
		2CADR	V97ETASK

		TCF	ENDOFJOB

		EBANK=	TIG
V97ETASK	CS	OCT24		# FORCE R1 OF V06N40 TO READ  59X59
		TS	TIG
		CAF	V06N40		# REDISPLAY V06N40
		TS	NVWORD1
		TCR	E6SETTER	# RETURN TO EBANK6 FOR REST OF V97ETASK
		EBANK=	CSMMASS
		CAF	3MDOT		# 3 SECONDS OF MDOT (2-4 SEC ENGFAIL
		AD	CSMMASS		#	DETECTION) NOT LOST BECAUSE THRUST
		TS	MASSTMP		#	FAILED....COPYCYCLE FOR MASSBACK
		TC	PHASCHNG
		OCT	00754		# A, 4.75 = SPSOFF97 (-0 CS), TBASE OLD
SPSOFF97	TCR	SPSOFF
		TC	PHASCHNG
		OCT	00114		# A, 4.11 = V97E40.6 (250 CS), TBASE OLD
		TC	FIXDELAY	# DELAY 2.5 SECONDS FOR (POSSIBLE) TAIL-
		DEC	250		#	OFF (FALSE THRUST-LOSS)

		EBANK=	DAPDATR1
V97E40.6	CAF	BIT1
		TC	WAITLIST
		EBANK=	CNTR
		2CADR	PRE40.6		# USE S40.6 RESTART ENTRY TO TRIM ENGINE

		TC	IBNKCALL	# RCS DAP IN 0.6SEC, SETTING T5 BITS TO
		CADR	RCSDAPON	#	KILL TVCEXEC/TVCROLLDAP STARTS.
					#	LEAVE NARROW DEADBAND FOR REIGNITE.

		TC	2PHSCHNG
		OCT	00026		# A, 6.2 = PRE40.6 (-0 CS), CLOKTASK (1 SEC)
		OCT	05014		# C, DELTAT NEXT, TASK BELOW, IN
		DEC	-0		# -0 CS.

QUICKIGN	CS	PRIO14		# CLEAR ASTNFLAG AND SET IGNFLAG FOR
		MASK	FLAGWRD7	#	IMMEDIATE V99 RESPONSE.
		AD	BIT13
		TS	FLAGWRD7
		TC	FIXDELAY	# DELAY TO ALLOW TIME FOR PRE40.6
# Page 709
		DEC	30

V99FLASH	CS	BIT9		# CAUSE V99 TO FLASH
		TS	NVWORD1
		TC	2PHSCHNG
		OCT	40774		# A, 4.77 = TIG-0 (-0 CS) TBASE FOR PREPTVC
		OCT	00033		# A, 3.3 = S40.13 (PRIO 20)
		CAF	PRIO20		# SET UP TIMEBURN
		TC	FINDVAC
		EBANK=	TGO
		2CADR	S40.13

ENDV97E		TCF	TASKOVER	# WAIT FOR CLOCKJOB (IMMEDIATE) REACTION
					# 	TO FLASHING V99 RESPONSE.

# MOD N02				LOG SECTION P40-P47
# MOD BY ZELDIN
#
# FUNCTIONAL DESCRIPTION
#	COMPUTE INITIAL THRUST DIRECTION(UT) AND INITIAL VALUE OF VG
#	VECTOR(VGTIG).
#
# CALLING SEQUENCE
#	L	CALL
#	L+1		S40.1
#
# NORMAL EXIT MODE
#	AT L+2 OF CALLING SEQUENCE (GOTO L+2) NORMAL RETURN OR
#	ERROR RETURN IF NOSOFLAG =1
#
# SUBROUTINES CALLED
#	CSMPREC
#	INITVEL
#	CALCGRAV
#	MIDGIM
#
# ALARM OR ABORT EXIT MODES
#	L+2 OF CALLING SEQUENCE, UNSOLVABLE CONIC IF NOSOFLAG=1
#
# ERASABLE INITIALIZATION REQUIRED
#	WEIGHT/G	ANTICIPATED VEHICLE MASS	SP B16 KGM
#	XDELVFLG	1=DELTA-V MANEUVER, 0=AIMPT STEER
#   IF DELTA-V MANEUVER:
#	DELVSIN		SPECIFIED DELTA-V REQUIRED IN
#			INERTIAL COORDS. OF ACTIVE VEHICLE
#			AT TIME OF IGNITION		VECTOR B7 M/CS
#	DELVSAB		MAG. OF DELVSIN			DP B7 M/CS
#	RTIG		POSITION AT TIME OF IGNITION	VECTOR B29 M
#	VTIG		VELOCITY AT TIME OF IGNITION	VECTOR B7 M/CS.
#	CSTEER = 0					DP
#   IF AIMPOINT STEERING:
#   IF AIMPT STEER
#	TIG		TIME OF IGNITION		DP B28 CS
#	RTARG		POSITION TARGET TIME		VECTOR B29 M
#	CSTEER = ECSTEER (GR 0) 			DP B1
# Page 710
#	TPASS4 -- TIME OF ARRIVAL AT AIMPOINT
#
# OUTPUT
#	UT		1/2 UNIT VECTOR ALIGNED WITH THRUST DIRETION IN REF COOR
#	VGTIG		INITIAL VALUE OF VELOCITY
#			TO BE GAINED (INERT. COORD.)		VECTOR B7 M/CS
#	DELVLVC		VGTIG IN LOC. VERT. COORDS.		B7 M/CS
#	F		NOMINAL THRUST FOR ENG USED FOR S40.13	DP B7 M-NEWT
#	BDT		V REQUIRED AT TIG -V REQUIRED AT (TIG-2SEC)
#	-GDT		FOR S40.13				VECT B7 M/CS
#	RTIG		CALC IN S40.1B (AIMPT) FOR S40.2,3	VECTOR B29M
#			POSITION AT TIME OF IGNITION
#
# DEBRIS	QTEMP1
#		MPAC, QPRET
#		PUSHLIST
#		RTX2,RTX1

		BANK	14
		SETLOC	P40S1
		BANK

		COUNT	16/S40.1

S40.1		SET	VLOAD
			FIRSTFLG
			LO6ZEROS
		STORE	BDT
		STQ	BOF
			QTEMP
			XDELVFLG
			S40.1B		# LAMBERT
		VLOAD	ABVAL		# EXTERNAL DELTA-V
			DELVSIN
		STORE	DELVSAB		# COMPUTE FOR P30/P40 INTERFACE
					#	THUS PERMITTING MODULE-ONLY CHANGE
		SETPD	VLOAD
			0
			VTIG
		STORE	VINIT
		VXV	UNIT
			RTIG
		STOVL	UT		# UP IN UT
			RTIG
		STORE	RINIT
		VSQ	PDDL
			36D
		DMPR	DDV
			THETACON
		DMP	DMP
			DELVSAB
			WEIGHT/G
		DDV
# Page 711
			F
		STOVL	14D
			DELVSIN

		DOT	VXSC
			UT
			UT
		VSL2	PUSH		# (DELTAV.UP)UP SCALED AT 2(+7) P.D.L. 0
		BVSU	PDDL		# DELTA VP SCALED AT 2(+7) P.D.L. 6
			DELVSIN
			14D
		SIN	PDVL
			6D
		VXV	UNIT
			UT
		VXSC	STADR
		STOVL	VGTIG		# UNIT(VP X UP)SIN(THETAT/2) IN VGTIG.
		UNIT	PDDL		# UNIT(DELTA VP) IN P.D.L. 6
			14D
		COS	VXSC
		VAD	VXSC
			VGTIG
			36D
		VSL2 	VAD
		STADR
		STORE	VGTIG		# VG IGNITION SCALED AT 2(+7) M/CS

		UNIT
		STOVL	UT		# THRUST DIRECTION SCALED AT 2(+1)
			VGTIG
		PUSH	SET
			AVFLAG
		CALL
			MIDGIM		# VGTIG IN LV COOR AT 2(+7)M/CS IN DELVLVC
		GOTO
			QTEMP
S40.1B		DLOAD	DSU		# LAMBERT
			TIG
			TWODT
		STODL	TDEC1
			TPASS4
		DSU
			TDEC1
		STCALL	DELLT4
			AGAIN
		VLOAD
			VIPRIME
		STODL	UT
			TIG
		STORE	TDEC1
# Page 712
		BDSU
			TPASS4
		STCALL	DELLT4
			AGAIN
		VLOAD	PUSH
			DELVEET3
		STORE	VGTIG
		SET	CALL
			AVFLAG
			MIDGIM
		SETPD	GOTO
			0
			CALCUT

THETACON	2DEC	.31830989 B-8

		SETLOC	P40S3
		BANK

		COUNT	24/S40.1

EP4(45)H	2DEC	.125

EP4(10)H	2DEC	.027777777

AGAIN		STQ	CALL
			QTEMP1
			THISPREC
		SXA,2	SXA,1
			RTX2
			RTX1
		VLOAD
			RATT
		STORE	RTIG
		STOVL	RINIT
			VATT
		STORE	VTIG
		STORE	VINIT
		SETPD	SLOAD
			0
			HI6ZEROS
		PDDL	BON
			EP4(45)H
			NORMSW
			+3
		DLOAD
			EP4(10)H
		PUSH	CALL
			INITVEL
		SETPD	GOTO
# Page 713
			0
			QTEMP1
CALCUT		VLOAD	CALL
			RTIG
			CALCGRAV	# GDELTAT IN MPAC AT 2(+7) M/CS
		VSL1	V/SC
			200CS		# G AT 2(-5) M/CS. CS
		PDVL	VSU
			VIPRIME
			UT
		V/SC	VSU
			200CS
		VXSC	VSL2
			CSTEER
		STOVL	12D		# B.C SCALED AT 2(-15) PDL 12D
			VGTIG
		UNIT	PUSH		# UG PDL 0 SCALED AT 2(+1)

		DOT	VXSC
			12D
			0
		VSL2	BVSU
			12D
		STODL	12D		# Q PDL SCALED AT 2(-5)
			F
		SRR	DDV
			4
			WEIGHT/G
		DSQ	PDVL		# F/MASS SQUARED PDL 6 AT 2(-10M/(CS.CS)
			12D
		VSQ
		BDSU	SQRT
		VXSC	VSL1
		VAD	UNIT
			12D
		STCALL	UT
			QTEMP
200CS		2DEC	200 B-12

# Page 714
# PROGRAM DESCRIPTION S40.2,3		DATE 15 NOV 66
# MOD NO 2				LOG SECTIONS P40-P47
# MOD BY ZELDIN
#
# FUNCTIONAL DESCRIPTION
#
#	COMPUTE GIMBAL ANGLES IF THRUSTING OCCURRED WITH PRESENT IMU
#	ORIENTATION, WINGS LEVEL SPACECRAFT, HEADS UP
#	COMPUTE X AXIS OF ENGINE BELL
#	COMPUTE PREFERRED IMU ORIENTATION (XSCREF)
#	FOR THIS CALCULATION, ASSUME X AXIS OF SC ALONG UT INITIALLY,
#	YSC=UNIT(XXR), ZSC=UNIT(XX(XXR)) AND ROTATE ENGINE BELL ALONG UT.
#	NEW SC AXES WILL BE APPROX. WINGS LEVEL AND NEW SC AXES IN REF.
#	COORDS. WILL BE PREFERRED IMU ORIENTATION.
#	COMPUTE DESIRED THRUST DIRECTION IN SM COORDS.
#
# CALLING SEQUENCE
#	L	CALL
#	L+1		S40.2,3
#
# NORMAL EXIT MODE
#	AT L+2 OF CALLING SEQUENCE (GOTO L+2)
#
# SUBROUTINES CALLED
#	CALCGA
#
# ALARM OR ABORT MODES
#	NONE
#
# ERASABLE INITIALIZATION REQUIRED
#	PACTOFF		TOTAL PITCH TRIM ANGLE		SP AT 1.0795111 REV.
#	YACTOFF		TOTAL YAW   TRIM ANGLE		SP AT 1.0795111 REV.
#	UT		DESIRED THRUST DIRECTION	VECT. B2 M/(CS.CS)
#	RTIG		POSITION AT TIME OF IGNITION	VECT. B29 M
#	ENG2FLAG	ON=RCS  OFF=SPS
#
# OUTPUT
#	SCAXIS		UNIT VECT. ALIGNED WITH ENG BELL IN SC COOR.	B1
#	XSCREF		UNIT VECTORS ALIGNED WTH PREFERRED IMU		B1
#	YSCREF
#	ZSCREF
#	GIMBAL ANGLES IN THETAD
#	POINTVSM	UNIT VECT ALONG DESIRED THRUST DIRECTION IN SM	B1
#
# DEBRIS
#	PUSHLIST, QPRET, MPAC
#	QTEMP	TEMP. ERASABLE

		BANK	24
		SETLOC	P40S
		BANK
		COUNT*	$$/S40.2
S40.2,3		VLOAD	MXV
			UT
			REFSMMAT
		VSL1	STQ
			QTEMP
		STORE	POINTVSM	# THRUST IN SM AT 2
		SETPD	BON
			0
# Page 715
			ENG2FLAG
			S40.2,3B
		DLOAD
			HI6ZEROS
		PUSH	SLOAD		# ZERO PDL 0
			YACTOFF
		DMP	SL1
			TRIMSCAL
		DAD	PUSH
			YBIAS
		COS	PDDL		# COS(Y +Y0) PDL 2
		SIN	PUSH		# SIN(Y +Y0) PDL 4
		SLOAD
			PACTOFF
		DMP	SL1
			TRIMSCAL
		DAD	PUSH
			PBIAS
		COS	PDDL		# COS(P +P0) PDL 6
		SIN	PUSH		# SIN(P +P0) PDL 8D
		STODL	ZSCREF		# SIN(P +P0)
			6
		DMP	SL1
			4
		DCOMP	PDDL		# -SIN(Y+Y0)COS(P+P0) PDL 10
			6
		DMP	SL1
			2
		VDEF

		STODL	XSCREF		# PD POINTER AT 6 NEW SC X AXIS SCALED AT
			ZSCREF
		DMP	SL1
			4
		PDDL	DMP
			ZSCREF
			2
		SL1	DCOMP
		VDEF

		STODL	ZSCREF		# PD POINTER AT 4 NEW SC Z AXIS SCALED AT 2
		VDEF

		STODL	YSCREF		# PD POINTER AT 0 NEW SC Y AXIS SCALED AT 2
			ZSCREF
		PDDL	PDDL
			YSCREF
			XSCREF
		VDEF
# Page 716
		STOVL	SCAXIS		# ENGINE BELL SCALED AT 2
			UT
		PDVL	UNIT
			RTIG
		VXV	VCOMP
			0
		UNIT	PUSH
		CALL
			TSTRXUT
		VXV	VCOMP
			0
		VSL1	PDVL		# 2 RF/SC IN PDL 12D
			XSCREF
		VXM	VSL1
			0
		STOVL	XSCREF		# X OF PREF. IMU,X OF SC IN REF COOR. AT 2
			YSCREF
		VXM	VSL1
			0
		STOVL	YSCREF		# Y OF PREF. IMU,Y OF SC IN REF COOR. AT 2
			ZSCREF
		VXM	VSL1
			0
		STORE	ZSCREF		# Z OF PREF. IMU,Z OF SC IN REF COOR. AT 2
		SETPD	GOTO
			0
			QTEMP
S40.2,3B	VLOAD
			UNITX
		STOVL	SCAXIS
			UT
		STORE	XSCREF
		VXV	UNIT
			RTIG
		STCALL	6D
			TSTRXUT
		STORE	YSCREF
		VXV	VCOMP
			XSCREF
		VSL1
		STCALL	ZSCREF		# ZNB AXIS IN REF COOR
			QTEMP
TSTRXUT		DLOAD	BHIZ
			36D
			BADVCTOR
		VLOAD	RVQ
			6D
BADVCTOR	VLOAD	UNIT
			RTIG
		PDVL	UNIT
# Page 717
			VTIG
		VSR3	VAD
		VXV	UNIT
			UT
		VCOMP
		STORE	6D
		RVQ
TRIMSCAL	2DEC	1.07975111 B-1

YBIAS		2DEC	+.00263888889	# YAW	MECH BIAS (+0.95 DEG, THRUST ON)

PBIAS		2DEC	-.00597222222	# PITCH	MECH BIAS (-2.15 DEG, THRUST ON)

					# REFERENCE, TRW 68.6520.3.3-40 27 FEB, 1968

# PROGRAM DESCRIPTION S41.1		DATE 8 DEC 66
# MOD NO 1				LOG SECTION P40-P47
# MOD BY ZELDIN
#
# FUNCTIONAL DESCRIPTION
#
#	COMPUTE VELOCITY TO BE GAINED INITIALLY IN REF COORDS.
#	TO CONTROL COORDS.
#
# CALLING SEQUENCE
#
#	L	CALL
#	L+1		S41.1
#
# NORMAL EXIT MODE
#
#	AT L +2 OF CALLING SEQUENCE
#
# SUBROUTINES CALLED:
#
#	CALCSMSC
#	CDUTRIG
#
# ALARM OR ABORT MODES
#
#	NONE
#
# ERASABLE INITIALIZATION REQUIRED
#
#	VG IN REF. COORD. PDL L POINTER AT L+5.  S41.1 WILL RETURN WITH
# 	POINTER AT L (L MUST BE LESS THAN OR = TO 14D)
#
# OUTPUT
#
#	MPAC CONTAINS VG IN CONTROL COORDS		VECT. B7 M/CS
#
# DEBRIS:
#
#	QTEMP		TEMP ERASABLE
#	QPRET

		COUNT	22/S41.1

		SETLOC	P40S5
		BANK

S41.1		STQ	CALL
			QTEMP
			CDUTRIG
		VLOAD
		MXV	CALL
			REFSMMAT
			*SMNB*
# Page 718
		MXV	VXSC
			QUADROT
			TENBNK14	# VG IN CONTROL COORD IN MPAC SCALED AT
		VSL5	GOTO		# VG IN CONTROL COORDS. IN MPAC AT 2(+7)
			QTEMP
TENBNK14	2DEC	10. B-4

# Page 719
# NAME		S40.8 -- CROSS PRODUCT STEERING
# FUNCTION	(1) UPDATES THE VELOCITY-TO-BE-GAINED VECTOR.
#		(2) GENERATES ANGULAR RATE STEERING COMMANDS FOR AUTOPILOT.
#		(3) ESTABLISHES ENGINE CUT-OFF SIGNALS AT APPROPRIATE TIMES.
#		(4) INITIATES THRUST-FAIL ROUTINE, R40
# CALLING SEQ	CALL S40.6
# INPUT		VGPREV 		LAST VALUE OF THE VELOCITY-TO-BE-GAINED VECTOR
#				PRIOR TO UPDATING IN METERS/CS AT +7.
#		DELVREF		CHANGE IN VEHICLE VELOCITY SINCE LAST MEASUREMENT
#				IN METERS/CS AT +7.
#		BDT		EFFECT OF RATE OF CHANGE OF REQUIRED VELOCITY AND
#				GRAVITY DURING DT UPON VELOCITY-TO-BE-GAINED IN
#				METERS/CS AT +7.
#		CSTEER		A SCALAR OF THE STEERING LAW, SC.AT B+1, USED FOR
#				SPS AIMPOINT STEERING MANEUVERS.
#		IDLEFAIL	A FLAG TO INHIBIT (IDLE) THE THRUST-FAIL ROUTINE.
#		STEERSW		A SWITCH TO PRECLUDE NEEDLESS CONDUCT OF STEERING.
#		REFSMMAT, DAPDATR1, PIPTIME
#		EREPFRAC, ETDECAY, KPRIMEDT FOR TVC.
# OUTPUT	TTOGO		TIME REMAINING FOR ENGINE BURN IN CS AT +28.
#		OMEGAC		DP VECTOR RATE COMMAND, SC.AT 1/(2TVCDT) REVS/SEC.
#		VG, VGPREV, VGDISP, TGO, TIG, SCALED AS NOTED IN CODING
#		STEERSW, IMPULSW, NVWORD1
#		REPFRAC, CNTR, VCNTR, VCNTRTMP FOR TVC (R40 INTERFACING)
# DEBRIS	OMEGAXC, +1
# SUBROUTINES USED:  *SMNB*, ALARM

		SETLOC	P40S1
		BANK
		EBANK=	DAPDATR1
		COUNT	16/S40.8

S40.8		SETPD	STQ
SPBIT1			00D
			QTEMP
		VLOAD	BVSU		# CONSTRUCT DELVG, SC.AT B+7 M/CS
			DELVREF
			BDT
		VAD
			VGPREV
		STORE	VG		# VELOCITY-TO-BE-GAINED, SC.AT B+7 M/CS

		ABVAL
		STORE	VGDISP		# FOR DISPLAY PURPOSES
		EXIT
		TC	PHASCHNG
		OCT	10035		# TYPE B RESTART RESTART BELOW AND 5.3 REREADAC

		TC	INTPRET
		VLOAD
# Page 720
			VG
		STORE	VGPREV
		BOFF	VLOAD
			STEERSW		# SKIP TGO AND CROSS-PRODUCT
			QTEMP
			DELVREF
		ABVAL	PUSH		# CHECK FOR LOTHRUST
		SLOAD	DMP
			DVTHRESH	# SC.AT B-2 M/CS
			DPB-9
		BDSU
		BMN	EXIT
			LOTHRUST
		CAE	DAPDATR1	# ENABLE TVCDAP CG TRACKING
		MASK	BIT14
		CCS	A
		CAF	BIT1
		INDEX	A		# LM-OFF, LM-ON VALUE
		CAE	EREPFRAC
		TS	REPFRAC

		TC	INTPRET
TGOCALC		VLOAD	BVSU		# GET DELVG
			DELVREF
			BDT
		UNIT
		DOT	PUSH		# (00D)
			VG
		BPL	DDV		# ANGLE SHOULD BE GREATER THAN PI/2
			INCRSVG		#	DISPLAY ALARM IF NOT
			2VEXHUST
		DAD	DMP		# (DOT PRODUCT UP FROM 00D)
			LODPHALF
		NORM	SR1
			X1
		PDDL	NORM
			36D		# (MAG DELVG)
			X2
		BDDV
		XSU,2	SL*
			X1
			0 -9D,2
		DMP	PUSH		# (00D)
			-FOURDT
		SLOAD	SR
			ETDECAY		# ETDECAY SC.AT B+14 CS
			14D
		BDSU	STADR
		STORE	TGO		# TIME TO GO IN CS. AT +28
		DAD
# Page 721
			PIPTIME
		STODL	TIG
			TGO
		DSU	BMN
			FOURSEC
			S40.81

XPRODUCT	VLOAD	VXSC
			BDT
			CSTEER
		VSL2	VSU
			DELVREF
		UNIT	PDVL
			VG
		UNIT	VXV
		MXV	CALL
			REFSMMAT	# (REFSMMAT/2)
			*SMNB*
		VXSC
			KPRIMEDT	# (KPRIMEDT SCIAT PI/8 RAD)
OMEGACLC	STORE	OMEGAC
		GOTO
			QTEMP

		SETLOC	DAPS7
		BANK
		COUNT	17/S40.8

TWODT		2DEC	200.0 B-28	# 2 SEC

-FOURDT		2DEC	-800 B-18	# -4(200CS), SC.AT B+18CS (-4 FOR SCALING)

2VEXHUST	2DEC	63.020792 B-7	# 2(10338.0564 FPS), SC.AT B+7 M/CS

FOURSEC		2DEC	400.0 B-28	# 4 SEC

DPB-9		2DEC	1 B-9

		SETLOC	DAPS6
		BANK

		COUNT	20/S40.8

S40.81		SET	VLOAD		# TGO LESS THAN 4 SECONDS
			IMPULSW		# FOR ENGINE-OFF CALL
			HI6ZEROS
RATEZRO		STORE	OMEGAC		# TVC TO ATTITUDE HOLD
		EXIT
		CAF	POSMAX		# INHIBIT SWITCHOVER/TVC EG TRACKING
		TS	CNTR
# Page 722
		TC	INTPRET
		CLEAR	GOTO
			STEERSW		# RESTARTS OK
			QTEMP
INCRSVG		EXIT			# ALARM INDICATING THAT THRUST IS POINTING
		TC	ALARM		# IN WRONG DIRECTION.
		OCT	01407
		TC	INTPRET
		GOTO
			QTEMP

LOTHRUST	BON	VLOAD		# THRUST FAILURE (LO-OR-NO) INDICATED
			IDLEFAIL	# SET BY V97P.  ALLOWS 1 BYPASS IN CASE OF
			QTEMP		#	UNFAVORABLE S40.8 SYNCH.
			HI6ZEROS	# START OF ENGINE-FAIL (R40) OPERATIONS
		STORE	OMEGAC		# PUT TVC IN ATTITUDE HOLD
		EXIT

		CS	ZERO
		TS	VCNTR		# KILL CSMMASS UPDATING
		TS	VCNTRTMP	# (TVCEXEC LOGIC REQUIRES THIS TOO)
		TS	REPFRAC		# KILL TVCDAP CG TRIM TRACKING
		TS	NVWORD1		# SET UP ENGINE-FAIL V97FLASH (CLOCKJOB)

		TC	INTPRET
		CLEAR	GOTO		# INHIBIT STEERING AND TGO CALC (MANUAL
			STEERSW		# 	SHUTDOWN IF NOT SET UP AGAIN)
			QTEMP		# RESTARTS OK

# Page 723
# NAME		S40.9 -- VTOGAIN (AIMPOINT MANEUVERS ONLY)
# FUNCTION	(1) GENERATES REQUIRED VELOCITY AND VELOCITY-TO-BE-GAINED
#		VECTORS FOR USE DURING AIMPOINT MANEUVERS.
#		(2) UPDATES THE B VECTOR WHICH IS USED IN THE FINAL
#		CALCULATION OF EXTRAPOLATING THE VELOCITY-TO-BE-GAINED.
# CALLING SEQ	VIA FINDVEC AS NEW JOB.
# INPUT		RNIT	ACTIVE VEHICLE RADIUS VECTOR IN METERS AT +29.
#		VNIT	ACTIVE VEHICLE VELOCITY VECTOR IN METERS/CS AT +7.
#		VRPREV	LAST COMPUTED VELOCITY REQUIRED VECTOR IN
#			METERS/CS AT +7.
#		NONTIG	TIME OF IGN.  USED IN TARGETTING ROUTINES B+28
#		DELLT4	TRANSFER TIME FROM PIPTIME TO TARGET B+28
#		TNIT	TIME OF RNIT AND VNIT IN CS AT +28
#		GDT/2	HALF OF VELOCITY GAINED IN DELTA T TIME DUE TO
#			ACCELERATION OF GRAVITY IN METERS/CS AT +7.
#		DELVREF	CHANGE IN VELOCITY DURING LAST 2 SEC IN
#			METERS/CS AT +7.
#		NORMSW	SET=CENTRAL ANGLE BETWEEN RTARG AND RTIG IS BETWEEN
#			165 TO 195 DEGREES.
#			RESET=CENTRAL ANGLE OUTSIDE CONE DESCRIBED ABOVE.
# OUTPUT	VGTEMP	VELOCITY TO BE GAINED VECTOR IN METERS/CS AT +7.
#		COGA	INPUT OF INITIAL GUESS FOR LAMBERT FROM S40.1
#			OR PREVIOUS PASS THRU S40.9.
#		GOBL/2	OBLATENESS TERM IN AVG GRAV CALC: GOBL*RSQ/MU
#		VRPREV/	VELOCITY REQUIRED VECTOR IN METERS/CS AT +7.
#		BDT	B VECTOR IN METERS/CS AT +7.
# SUBROUTINES USED -- INITVEL

		SETLOC	P40S1
		BANK

		EBANK=	NBRCYCLS
		COUNT	16/S40.9

S40.9		TC	INTPRET
		SETPD	DLOAD
			00D
			LO6ZEROS
		PDDL
			EP4(45)L
		BON	DLOAD
			NORMSW
			+2
			EP4(10)L
		PUSH
		CLEAR	CALL
			GUESSW
			HAVEGUES
		EXIT
		TC	PHASCHNG	# SAVE TIME BY NOT REDOING LAMBERT CALCS
		OCT	05021		# C, PRIORITY NEXT, JOB BELOW
# Page 724
		OCT	10000
		TC	INTPRET
ENDLAMB		BON
			FIRSTFLG
			FIRSTTME
		VLOAD	VSU
			VIPRIME
			VRPREV
		PDDL	DSU
			TNIT
			TNITPREV
		SL	BDDV
			17D
			200CSHI
		VXSC
		VSU	VSL1
			GDT/2
		STORE	BDT
FIRSTTME	SLOAD	DCOMP
			RTX2
		BMN
			MOONCASE
		VLOAD	UNIT
			RN
		DLOAD	DSU
			PIPTIME
			NOMTIG
		DMP	DDV
			EARTHMU
			34D
		VXSC	VAD
			GOBL/2
			VGTEMP		# NOTE: NO TEST IS MADE TO SUBTRACT GOBL
		STORE	VGTEMP		# INSIDE 165-195 DEGREE CONE AREA.
MOONCASE	EXIT
		TC	PHASCHNG
		OCT	04021		# C, JOB BELOW

COPY40.9	TC	INTPRET
		DLOAD
			TNIT
		STOVL	TNITPREV
			VIPRIME
		STORE	VRPREV
		CLEAR	EXIT
			FIRSTFLG
	-2	CS	ONE		# REDO40.9 (RESTART) ENTRY TO END S40.9
		TS	NBRCYCLS
ENDS40.9	TC	PHASCHNG
		OCT	00001
# Page 725
		TCF	ENDOFJOB

REDO40.9	TC	INTPRET		# S40.9 RESTARTS COME HERE TO GRACEFULLY
		VLOAD			#	TERMINATE S40.9 SO THAT IT CAN BE
			LO6ZEROS	#	SET UP WITH LATEST R,V,T NEXT PASS
		STODL	DELVSUM		#	(TYPE C PHASE POINTS '04021' WILL
			LO6ZEROS	#	FORCE NORMAL S40.9 TERMINATIONS,
		STOVL	NBRCYCLS	#	RATHER THAN LOSE TIME OF BRAND NEW
			VGPREV		#	PASS -- QUICK OLD DATA BETTER THAN
		STORE	VGTEMP		#	NONE) NOW CAN GO THRU SETUP.9
		EXIT			#	WITHOUT DISTURBING VGPREV.
		TCF	ENDS40.9 -2	# STORE 0,0 COVERED NBRCYCLS,P -- FIX UP S

200CSHI		2DEC	200 B-12

EARTHMU		2DEC*	-3.986032 E10 B-36*

EP4(45)L	2DEC	.125

EP4(10)L	2DEC	.027777777

# Page 726
# NAME:  		S40.13 -- TIMEBURN
#
# FUNCTION		(1) DETERMINE WHETHER A GIVEN COMBINATION OF VELOCITY-TO-
#			BE-GAINED AND ENGINE CHOICE RESULT IN A BURN TIME SUFFICIENT
#			TO ALLOW STEERING AT THE VEHICLE DURING THE BURN, AND
#			(2) THE MAGNITUDE OF THE RESULTING BURN TIME -- IF IT IS SHORT --
#			AND THE ASSOCIATED TIME OF THE ENGINE OFF SIGNAL.
#
# CALLING SEQUENCE	VIA FINDVAC AS A NEW JOB
#
# INPUT			VGTIG -- VELOCITY TO BE GAINED VECTOR (METERS/CS) AT +7
#			WEIGHT/G -- MASS OF VEHICLE IN KGM AT TIG
#			F -- ENGINE THRUST IN M.NEWTONS AT +7
#			MDOT -- RATE OF DECREASE OF VEHICLE MASS DURING ENGINE BURN
#				IN KILOGRAMS/CENTISECOND AT +3.  THIS SCALING MAY
#				REQUIRE MODIFICATION FOR SATURN BURNS.
#
# OUTPUT		IMPULSW		ZERO FOR STEERING
#					ONE FOR ATTITUDE HOLD
#			TGO		TIME TO BURN IN CENTISECONDS AT +14
#			THE QUANTITY M.NEWTON SHALL BE USED TO EXPRESS WEIGHT IN TERMS OF
#			(KILOGRAM*METER)/(CENTISECOND*CENTISECOND)
#			(1) M.NEWTON = (10000) NEWTONS.

		EBANK=	TGO
		COUNT	16/40.13

S40.13		TC	INTPRET
		SETPD	SET
			00D
			IMPULSW		# ASSUME NO STEERING UNTIL FOUND OTHERWISE
		VLOAD	ABVAL
			VGTIG		# VELOCITY TO BE GAINED AT +7
		EXIT
		CAF	BIT7		# TEST +X TRANSLATION
		EXTEND
		RXOR	CHAN31
		MASK	BIT7
		EXTEND
		BZF	NOTADDUL
		TC 	INTPRET
		PDDL	DDV		# 00D = MAG OF VGTIG AT +7
			S40.135		# COMPENSATION FOR 2 JET ULLAGE AT +24
			WEIGHT/G	# MASS IN KGMS AT +16
		BON	SL1		# DOUBLE CORRECTION IF FOUR JETS
			NJETSFLG
			S40.130
S40.130		BDSU
		PDDL	DDV		# 00D = MAG OF VGTIG CORRECTED FOR ULLAGE
			K1VAL		# M.NEWTON-CS AT +24
			WEIGHT/G
		BDSU	BMN
			00D
			S40.131		# TGO LESS THAN 100 CS
		PDDL	DMP		# 02D = TEMP1 AT +7
# Page 727
			EMDOT		# SPS FLOW RATE SC.AT B+3 KG/CS (SP, NOTE)
			3.5SEC		# 350 CS AT +14
		BDSU	PDDL
			WEIGHT/G
			FANG
		DMP	SR2
			5SECOND		# 500 CS AT +14
		DDV	PUSH		# 04D = TEMP2
		BDSU	BPL
			02D
			S40.133		# TGO GREATER THAN 600 CS
		DLOAD	BDDV
		DMP	DAD
			5SECOND		# 500 CS AT +14
			1SEC2D		# 100 CS AT +14
		GOTO
			S40.132
S40.131		DLOAD	DMP		# TGO LESS THAN 100 CS
			WEIGHT/G
		DAD	DDV
			K2VAL		# M.NEWTON CS AT +24
			K3VAL		# M.NEWTON AT +10
S40.132		EXIT
		EBANK=	TGO
		TC	TPAGREE
		CA	MPAC
		XCH	L
		CA	ZERO
		DXCH	TGO		# TGO IN CS AT +28
		TC	S40.134
S40.133		CLEAR	EXIT		# WILL STEER VEHICLE
			IMPULSW
S40.134		TC	PHASCHNG	# KILL GROUP 3
		OCT	3

		TCF	ENDOFJOB

NOTADDUL	TC	INTPRET
		GOTO
			S40.130 +1	# DO NOT COMPENSATE FOR 7 SEC OF ULLAGE
		SETLOC	DAPS7
		BANK

		COUNT	17/40.13

K1VAL		=	EK1VAL		# DP PAD LOAD B+23 NEWTON-SEC/E+2
K2VAL		=	EK2VAL		# DP PAD LOAD B+23 NEWTON-SEC/E+2
K3VAL		=	EK3VAL		# DP PAD LOAD B+09 NEWTONS/E+4
1SEC2D		2DEC	100.0 B-14	# 100.0 CS AT +14
# Page 728
3.5SEC		2DEC	350.0 B-13	# 350 CS AT +13

5SECOND		2DEC	500.0 B-14	# 500.0 CS AT +14

S40.135		2DEC	69.6005183 B-23	# IMPULSE FROM 7.96 SECS OF 2-JET FIRING
					# 	7.96 (199.6)COS(10) LB-SEC, SC.AT
					#	B+23 NEWTON-SEC/E+2 (7 SEC ULLAGE
					#	TO GO, PLUS 0.96 SEC FROM PIPTIME)

# Page 729
# NAME		S40.6 GIMBAL DRIVE TEST AND/OR GIMBAL TRIM
# MOD NO 5				DATE 9 MARCH, 1967
# MOD BY ENGEL				LOG SECTION P40-P47
#
# FUNCTIONAL DESCRIPTION
#	GIMBAL DRIVE TEST....0,+2,-2,0 DEGREE ENGINE COMMANDS, AT 2 SECOND
#		INTERVALS, FIRST IN PITCH, THEN IN YAW.  ASTRONAUT VERIFICATION
#		OF GIMBAL MOTION ON GPI
#	GIMBAL TRIM....AFTER A 4 SECOND DELAY, ENGINE COMMANDED TO
#		PRE-COMPUTED TRIM POSITION.  ASTRONAUT VERIFICATION ON GPI.
#	PRE40.6....RESTART ENTRY TO RE-DO S40.6, ONLY IF RCS IS ON --- IF TVC
#		IS NOT ON --- PRIMARILY TO GET ACTUATORS TRIMMED FOR IGNITION.
#		BYPASS 4 SEC DELAY.  SPEED IS CRITICAL NEAR IGNITION.
#		IF TVC IS ON (TVCDAPON OR LATER) THEN REDOTVC WILL TAKE CARE
#		OF RESTARTING ACTUATORS.
#
# CALLING SEQUENCE....
#	WAITLIST, WITH 2CADR FOR S40.6 (OR PRE40.6), WITH EBANK= CNTR
#
# NORMAL EXIT MODE -- FIXDELAY, TASKOVER
#
# SUBROUTINES CALLED....
#	OUTPUT (INTERNAL)
#	FIXDELAY
#
# ALARM OR ABORT EXIT MODES --- NONE
#
# ERASABLE INITIALIZATION REQUIRED
#	CNTR = +0, NORMALLY SET BY THE P40 CALL AT TST,TRIM.
#	MRKRTMP....POSITIVE FOR GIMBAL DRIVE TEST AND GIMBAL TRIM (BOTH)
#		   NEGATIVE FOR GIMBAL TRIM ONLY
#	PACTOFF, YACTOFF SC.AT 85.41 ARCSEC/BIT (V48N48 P, YTRIM)
#	"SC CONT" SWITCH AT "CMC" (A/P CONTROL SWITCH AT "GNC")
#	ACTIVE SPS GIMBAL MOTOR POWER(S), PITCH, YAW
#
# OUTPUT
#	TVCYAW, TVCPITCH (BITS RELEASED)
#	TVC ENABLE AND OPTICS ERROR COUNTER ENABLE
#
# DEBRIS
#	TBMPR60, CNTR

		BANK	17
		SETLOC	DAPS6
		BANK

		EBANK=	CNTR
		COUNT	20/S40.6

PRE40.6		CS	FLAGWRD6	# RESTART ENTRY TO S40.6 (DO NOT PERMIT
		MASK	OCT60000	#	IF TVC, BITS 15,14 = 1,0)
		EXTEND
		BZMF	+2
		TCF	TASKOVER	# TVC, REDOTVC WILL REESTABLISH INTERFACE

		CS	BIT1		# RCS, SO DO S40.6, GIMTRIM ONLY
# Page 730
		TS	MRKRTMP

		CAF	BIT1		# FOR REVISED S40.6 TIMING FOR RESTARTS...
		TS	CNTR		# TO INDICATE A RESTART ENTRY (CNTR 1S
					#	NORMALLY +0, BY S40.6)

		EBANK=	CNTR
S40.6		CS	ZERO		# INHIBIT OPTICS ACTIVITY
		TS	OPTIND

		CS	BIT2		# DISENABLE OPTICS ERROR COUNTERS (ZERO,
		EXTEND			# 	AND INHIBIT PULSE TRANSMISSION --
		WAND	CHAN12		#	NORMAL STATE)

		CAF	OCT02200	# TVC ENABLE (SPS SERVO AMPS SEE DAC
		EXTEND			#	VOLTAGES) AND DISENGAGE OPTICS/DAC
		WOR	CHAN12

		TC	FIXDELAY	# 60MS PROCEDURAL DELAY (40MS MINIMUM) FOR
		DEC	6		#	RELAY LATCHING

		CAF	BIT2		# ENABLE OPTICS ERROR COUNTERS
		EXTEND
		WOR	CHAN12

		TC	FIXDELAY	# 20MS PROCEDURAL DELAY (4MS MINIMUM) FOR
		DEC	2		#	RELAY LATCHING

RSTRTST		CCS	CNTR		# CHECK FOR RESTART ENTRY (PRE40.6)
		TCF	GIMTRIM +2	# RESTART ENTRY....BYPASS 4 SECOND DELAY
					#	TST,TRIM SETS +0 ON NORMAL ENTRY

		CAE	MRKRTMP		# CHECK FOR TEST/TRIM OR TRIM ONLY
		TS	CNTR		#	MRKRTMP SAVES CNTR FOR RESTARTS
		EXTEND
		BZMF	GIMTRIM		# (TRIM ONLY)

GDTSETUP	CS	ZERO		# GIMBAL DRIVE TEST SETUP, FOR PITCH
		TS	CNTR

GIMDTEST	CAF	+2ACTDEG	# GIMBAL DRIVE TEST, 1ST INCREMENT
		TC	OUTPUT		#	(LEAVES GIMBAL AT +2 DEG)
		CAF	-4ACTDEG	# 2ND INCREMENT (LEAVES GIMBAL AT -2)
		TC	OUTPUT
		CAF	+2ACTDEG	# 3RD INCREMENT (LEAVES GIMBAL AT -0)
		TC	OUTPUT

		CS	CNTR		# CHECK FOR COMPLETION OF YAW TEST.
# Page 731
		CCS	A
		TCF	GIMTRIM		# COMPLETED, GO TO GIMBAL TRIM ROUTINE
		CS	BIT1		# SET UP YAW TEST
		TS	CNTR
		TCF	GIMDTEST	# FOR YAW TEST

OUTPUT		EXTEND			# OUTPUT THE INCREMENT....SAVE Q
		QXCH	TEMPR60

		INDEX	CNTR
		TS	TVCPITCH

		INDEX	CNTR
		CAF	BIT11
		EXTEND
		WOR	CHAN14

		TC	FIXDELAY	# WAIT 2SEC, WHILE ASTRONAUT VERIFIES
		DEC	200		# 	GIMBAL MOTION ON GPI
		TC	TEMPR60

GIMTRIM		TC	FIXDELAY	# WAIT 4 SECONDS BEFORE GIMBAL TRIM
		DEC	400

	+2	CS	ZERO		# PICK UP TRIM VALUES AND OUTPUT THEM
		AD	PACTOFF		#	(AVOID +0) ENTRY POINT FROM RSTRTST
		TS	TVCPITCH	#	ON A RESTART, TO AVOID 4SEC DELAY
		CS	ZERO
		AD	YACTOFF
		TS	TVCYAW

		CAF	PRIO6		# RELEASE THE COUNTERS, BITS 11,12
		EXTEND
		WOR	CHAN14

ENDS40.6	TCF	TASKOVER

OCT02200	OCT	02200		# BITS 8,11 FOR CHANNEL 12 TVC/OPTICS
-4ACTDEG	DEC	-168		# -2(+2ACTDEG), WHOLE BITS, NO ROUNDUP
+2ACTDEG	DEC	+84		# +2 DEG, SC.AT 85.41 ARCSEC/BIT (+84D)

# CALLED BY "DONOUN46" (VERB 48), OR DIRECTLY BY "FRESHDAP" (RCS DAP) VIA IBNKCALL

		COUNT	20/S41.2

S41.2		CA	DAPDATR1
# Page 732
		MASK	THREE
		AD	A
		TS	RATEINDX

		INHINT
		CAE	DAPDATR1	# IS LEM ATTACHED (BITS 14,13 OF DAPDATR1
		MASK	PRIO30		#	=10)
		AD	-BIT14		# (OCT57777)
		EXTEND
		BZF	TOGETHER	# YES

		CS	BIT2		# NO, UNSET FLAG
		MASK	FLAGWRD7
		TS	FLAGWRD7

		TCF	+4

TOGETHER	CS	FLAGWRD7	# ATTACHED, SET FLAG FOR INTEGRATION
		MASK	BIT2
		ADS	FLAGWRD7

		RELINT

		CA	DAPDATR1
		MASK	BIT4
		EXTEND
		BZMF	+2		# DEC 46 MEANS NARROW DB
		CA	DEC409
		AD	DEC46		# DEC 455 MEANS WIDE DB
		TS	ADB

		CA	DAPDATR1
		MASK	BIT7		# QUAD BD
		EXTEND
		BZMF	+2
		CA	ONE
		TS	XTRANS
		CA	DAPDATR1
		MASK	BIT10		# QUAD AC
		EXTEND
		BZMF	+2
		CS	ONE
		ADS	XTRANS

		INHINT
		EXTEND
		BZF	+5		# CLEAR NJETSFLG (4 JETS, OR NO JETS)
		CS	FLAGWRD1	# SET NJETSFLG (2 JETS, AC OR BD QUADS)
		MASK	BIT15		# NJETSFLG = 1 FOR 2 JET ULLAGE (AC OR BD)
		ADS	FLAGWRD1
# Page 733
		TCF	+4
		CS	BIT15		# KJETSFLG = 0 FOR 4 JET (OR 0 JET) ULLAGE
		MASK	FLAGWRD1
		TS	FLAGWRD1
		RELINT
		CA	DAPDATR2
		MASK	BIT13
		EXTEND
		BZMF	+2
		TCF	+2
		CS	ONE
		COM
		TS	ACORBD		# MINUS FOR A-C, PLUS FOR B-D

		CA	DAPDATR2
		MASK	BIT10
		CCS	A
		TCF	+4
		CA	ONE
		TS	RACFAIL
		TCF	BDFAIL
		CA	ZERO
		TS	RACFAIL
		CA	DAPDATR2
		MASK	BIT4
		CCS	A
		TCF	BDFAIL
		CS	ONE
		TS	RACFAIL
BDFAIL		CA	DAPDATR2
		MASK	BIT7
		CCS	A
		TCF	+4
		CA	ONE
		TS	RBDFAIL
		TC	Q
		CA	ZERO
		TS	RBDFAIL
		CA	DAPDATR2
		MASK	BIT1
		CCS	A
		TC	Q
		CS	ONE
		TS	RBDFAIL
		TC	Q

# DAPFIG ENTRY VIA TC POSTJUMP AS JOB FROM "STABLISH" (VERB 46)

		BANK	42
		SETLOC	EXTVBS
# Page 734
		BANK

DAPFIG		CS	BIT9		# TURN OFF SIVB TAKEOVER
		EXTEND
		WAND	CHAN12
		CAE	DAPDATR1	# DETERMINE VEHICLE CONFIGURATION
		EXTEND
		MP	BIT3		#	RIGHT SHIFT 4 OCTAL DIGITS
		MASK	THREE		#	(IN CASE BIT 15 IS USED)
		INDEX	A
		TCF	+1		#	BRANCH BASED ON CONFIG....

		TCF	NODAPUP		# CM.......ACTIVATE NODAP
		TCF	RCSDAPUP	#	CSM......ACTIVATE RCSDAP
		TCF	RCSDAPUP	#	CSM/LEM..ACTIVATE RCSDAP
		TC	POSTJUMP
		CADR	SATSTKON
RCSDAPUP	INHINT			# CALL TO ACTIVATE RCSDAP, AND RETURN
		TCR	IBNKCALL
		CADR	RCSDAPON
		RELINT
		TCF	ENDFIG		# CAME IN VIA V46, GO OUT VIA GOPIN
NODAPUP		EXTEND			# T5 IDLE FOR NODAP (DON'T WORRY ABOUT T)
		DCA	T5IDLDAP
		DXCH	T5LOC
		TC	DOWNFLAG	# RESET T5-USAGE FLAGS FOR NODAP
		ADRES	DAPBIT1		# BIT 15 FLAG 6 = 0
		TC	DOWNFLAG
		ADRES	DAPBIT2		# BIT 14 FLAG 6 = 0
		INHINT
		TC	IBNKCALL	# ZERO JET CHANNELS IN 14 MS AND THEN
		CADR	ZEROJET		# LEAVE THE T6 CLOCK DISABLED.
		RELINT
		CAF	BIT1		# KILL KALCMANU JOB
		TS	HOLDFLAG
ENDFIG		TC	POSTJUMP	# CAME IN VIA V46, GO OUT VIA GOPIN
		CADR	GOPIN
		SBANK=	PINSUPER	# Added by RSB 2009
		EBANK=	PACTOFF
T5IDLDAP	2CADR	T5IDLOC

		SBANK=	LOWSUPER
		BANK	17
		SETLOC	DAPS6
		BANK

DEC409		DEC	409
DEC46		DEC	46

# Page 735

# CALLED BY "DONOUN47" (VERB 48), OR DIRECTLY BY "FRESHDAP" (RCS DAP)
S40.14		CAE	IXX		# RCS ENTRY
		EXTEND
		MP	CONTONE
		TS	J/M

		CA	IAVG
		EXTEND
		MP	CONTONE
		TS	J/M1

		TS	J/M2

		EXTEND
		DCA	CONTTWO
		EXTEND
		DV	IXX
		TS	KMJ

		EXTEND
		DCA	CONTTWO
		EXTEND
		DV	IAVG
		TS	KMJ1

		TS	KMJ2

		TC	Q

CONTONE		DEC	.662034		# 2PI/M
CONTTWO		2DEC	.00118

		COUNT 	24/TVNG

		BANK	31
		SETLOC	P40S
		BANK

POS-2.5		OCT	37405
		EBANK=	DAPDATR1
RCSCADR		2CADR	RCSUP

6SECT5		OCT	37704
		COUNT	21/RCSUP

		BANK	20

		SETLOC	DAPS3
		BANK

# Page 736

RCSUP		LXCH	BANKRUPT
		EXTEND
		QXCH	QRUPT

		TCR	RCSDAPON	# ACTIVATE RCS DAP

		TCF	RESUME

		EBANK=	DAPDATR1
RCSADDR		2CADR	RCSATT

0.6SECT5	OCT	37704

					# RCSDAPON ENTRY MUST BE UNDER INT-INHIBIT
RCSDAPON	CAF	0.6SECT5	# 0.6 SEC ALLOWS TVCEXEC/ROLLDAP TO DIE
	+1	TS	TIME5		# ENTRY FROM R00TOP00
		TS	T5PHASE		# WILL CAUSE FRESHDAP (+1)

		CS	RCSFLAGS	# SET BIT3 TO REINITIALIZE FDAI ERROR
		MASK	BIT3		#	DISPLAY, IN CASE SC CONT SWITCH
		ADS	RCSFLAGS	#	IN SCS NOT GNC (GUIDEMODE PRIMARY)

		EXTEND
		DCA	RCSADDR		# (RCSATT)
		DXCH	T5LOC

		CS	OCT60000	# SEE BITS 15,14 TO 01 TO INDICATE
		MASK	FLAGWRD6	#	T5 TAKEOVER BY RCSDAP
		AD	BIT14
		TS	FLAGWRD6	# KILLS TVCEXEC AND ROLLDAP STARTS

		TC	Q		# RETURN TO CALLER (TVCDAPOF OR RCSDAPUP)


